/**
 * 这个文件负责
 * 1、路由的映射
 * 2、核验传入的参数正确性 （通过schema里joi定义的校验规则
 * 3、对传入参数处理 挂载到req对象上 //有的共用中间件前置处理 会在app.js里路由前挂
 */
const express = require('express')
const router = express.Router()
// 导入解析 formdata 格式表单数据的包
const multer = require('multer')
// 导入处理路径的核心模块
const path = require('path')
// 导入验证数据的中间件
const expressJoi = require('@escook/express-joi')


/**发布新文章的路由
 * 
 * upload.single() 是一个局部生效的中间件，用来解析 FormData 格式的表单数据
 * 将文件类型的数据，解析并挂载到 req.file 属性中
 * 将文本类型的数据，解析并挂载到 req.body 属性中
 */
// 创建 multer 的实例对象，通过 dest 属性指定文件的存放路径 存放路径在接收的内容req.file不为undefined时起作用
const upload = multer({ dest: path.join(__dirname, '../uploads') })
const article_handler = require('../router_handler/article')
const { add_article_schema } = require('../schema/article')
//先后使用了两个中间件：先使用 multer 解析表单数据 再使用 expressJoi 对解析的表单数据进行验证
router.post('/add', upload.single('cover_img'), expressJoi(add_article_schema), article_handler.addArticle)


router.get('/list', article_handler.getArticle)

const { delete_article_schema } = require('../schema/article')
router.get('/delete/:id', expressJoi(delete_article_schema), article_handler.deleteArticle)

//可以看看form-data格式的源内容
// router.post('/add', (req, res, next) => {
//   let str = ''
//   req.on('data', (chunk) => { str += chunk })
//   req.on('end', () => {
//     console.log(str, 'form-data');
//     next()
//   })
// }, article_handler.addArticle)

module.exports = router